package com.yuzhihao.writejvm.read;

import com.yuzhihao.writejvm.clazz.ClassInfo;

import java.io.DataInputStream;
import java.io.IOException;

/**
 * 解析接口
 *
 * @author yzh
 * @date 2021年11月29日18:30:17
 */
public interface Parse {

    /**
     * 解析数据
     *
     * @param dis
     * @param ci
     */
    void parse(DataInputStream dis,ClassInfo ci);

    /**
     * 16进制转字符的方法
     *
     * @param bytes
     * @return
     */
    static String binaryToHexString(byte[] bytes) {
        String hexStr = "0123456789ABCDEF";
        StringBuilder result = new StringBuilder();
        String hex = "";
        for (byte aByte : bytes) {
            //字节高4位
            hex = String.valueOf(hexStr.charAt((aByte & 0xF0) >> 4));
            //字节低4位
            hex += String.valueOf(hexStr.charAt(aByte & 0x0F));
            result.append(hex);
        }
        return result.toString();
    }

    /**
     * 16进制转字符的方法
     * @param lenth 几个字节
     * @param dis 数据流
     * @return
     * @throws IOException
     */
    static int byteToInt(int lenth, DataInputStream dis) throws IOException {
        switch (lenth) {
            case 1:
                return dis.readUnsignedByte();
            case 2:
                return dis.readUnsignedShort();
            case 4:
                return dis.readInt();
            default:
                return 0;
        }
    }

}
